﻿/**********************************************************************
* @file   FITKAcousticsLoadMgrAdaptor.h
* @brief  载荷读写适配器
* @author yangjing (1195810980@qq.com)
* @date   2025-02-25
*********************************************************************/

#ifndef _FITFK_ACOUSTICS_LOAD_MODEL_ADAPTOR_H___
#define _FITFK_ACOUSTICS_LOAD_MODEL_ADAPTOR_H___

#include "FITKAcousticsAbstractAdaptor.h"
#include "FITK_Kernel/FITKCore/FITKCoreMacros.h"
#include "FITK_Kernel/FITKAdaptor/FITKIOAdaptorFactory.h"
#include "FITK_Component/FITKAcousticsPhysics/FITKAcousticsAbstractLoad.h"
#include <H5Cpp.h>
namespace IO {
    class FITKHDF5FileTool;
}

namespace Acoustics {
    class FITKAcousticsLoadManager;

}

namespace IO
{
    class FITKAcousticsHDF5IOAPI FITKAcousticsLoadMgrAdaptor : public FITKAcousticsAbsAdaptor
    {
    public:
        explicit FITKAcousticsLoadMgrAdaptor() = default;
        virtual ~FITKAcousticsLoadMgrAdaptor() = default;

        virtual bool adaptR() override;

        virtual bool adaptW() override;

    private:
         /**
        * @brief 读单极子数据
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  LoadManager    需要被写入的管理器
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool readExcitationMonopoles(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);

        /**
        * @brief 写单极子数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writeExcitationMonopoles(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);


         /**
        * @brief 读力和力矩激励数据
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  LoadManager    需要被写入的管理器
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool readExcitationForceMoments(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);

        /**
        * @brief 写力和力矩激励数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writeExcitationForceMoments(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);



        /**
        * @brief 读SEA声腔功率源数据
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  LoadManager    需要被写入的管理器
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool readPowerSEAAcoustic(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);

        /**
        * @brief 写SEA声腔功率源数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writePowerSEAAcoustic(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);

        /**
        * @brief 读SEA板功率源数据
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  LoadManager    需要被写入的管理器
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool readPowerSEAShell(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);

        /**
        * @brief 写SEA板功率源数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writePowerSEAShell(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);




        /**
       * @brief 读SEA梁功率源数据
       * @param @param[i]  gp      hdf5组别
       * @param @param[i]  LoadManager    需要被写入的管理器
       * @author yangjing (1195810980@qq.com)
       * @date 2024-1-20
       */
        bool readPowerSEABeam(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);

        /**
        * @brief 写SEA梁功率源数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writePowerSEABeam(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);

        /**
       * @brief 读SEA声腔约束数据
       * @param @param[i]  gp      hdf5组别
       * @param @param[i]  LoadManager    需要被写入的管理器
       * @author yangjing (1195810980@qq.com)
       * @date 2024-1-20
       */
        bool readConstraintSEAAcoustic(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);

        /**
        * @brief 写SEA声腔约束数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writeConstraintSEAAcoustic(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);


        /**
       * @brief 读SEA板约束数据
       * @param @param[i]  gp      hdf5组别
       * @param @param[i]  LoadManager    需要被写入的管理器
       * @author yangjing (1195810980@qq.com)
       * @date 2024-1-20
       */
        bool readConstraintSEAShell(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);

        /**
        * @brief 写SEA板约束数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writeConstraintSEAShell(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);



        /**
       * @brief 读SEA梁约束数据
       * @param @param[i]  gp      hdf5组别
       * @param @param[i]  LoadManager    需要被写入的管理器
       * @author yangjing (1195810980@qq.com)
       * @date 2024-1-20
       */
        bool readConstraintSEABeam(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);

        /**
        * @brief 写SEA梁约束数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writeConstraintSEABeam(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);

        /**
        * @brief 写HVAC噪声导入数据到hdf5数据文件中
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  data    待被写入文件的数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writeImportNoiseHVACs(H5::Group& gp, QList<Acoustics::FITKAcousticsAbstractLoad*>data);

        /**
        * @brief 读HVAC噪声导入数据
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  LoadManager    需要被写入的管理器
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool readImportNoiseHVACs(H5::Group&gp, Acoustics::FITKAcousticsLoadManager* LoadManager);



    private:
        /**
        * @brief 写载荷父类数据
        * @param @param[i]  gp      hdf5组别
        * @param @param[i]  PaentP  父类数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool writeAcousticsAbstractLoad(H5::Group &gp, Acoustics::FITKAcousticsAbstractLoad*PaentP);


        /**
        * @brief 读载荷父类数据
        * @param @param[i]  gp      hdf5组别
        * @param @param[out]  PaentP  父类数据
        * @author yangjing (1195810980@qq.com)
        * @date 2024-1-20
        */
        bool readAcousticsAbstractLoad(H5::Group&gp, Acoustics::FITKAcousticsAbstractLoad*PaentP);


    private:
        IO::FITKHDF5FileTool*m_toolp{ nullptr };
    };
    Register2FITKIOAdaptorFactory(FITKAcousticsHDF5, Acoustics::FITKAcousticsLoadManager, FITKAcousticsLoadMgrAdaptor);
}
#endif
